class Solution {
public:
    int longestOnes(vector<int>& nums, int k) {
        //不去做真正的翻0操作
        long long left=0;long long right=0;
        long long ret=0;
        long long sum=0;
        while(right<nums.size())
        {
            //进窗口
            if(nums[right]==1)
            {
                right++;
            } 
            else
            {
                right++;
                sum++;
            }
            while(sum>k)
            {
                //记录状态
                ret=max(ret,right-left-1);
                //注意到这里实际上right已经跳过最后的那个0了，所以得是-1，而不是正常的+1
                //出窗口
                if(nums[left]==0){ sum--;}
                left++;
            }
        }
        if(sum<=k) ret=max(ret,right-left);//有可能k给的很大，多过0的数量
        return ret;
    }
};